#pragma once

#include <iostream>
#include <string>
#include <memory>
#include "Socket.hpp"

using namespace SocketModule;

// 实现一个自定义的网络版本的计算器

// 约定好各个字段的含义，本质就是约定好协议

// client -> server
class Request
{
public:
    Request() {}
    Request(int x, int y, char oper)
        : _x(x),
          _y(y),
          _oper(oper)
    {
    }

    // 序列化
    std::string Serialize()
    {
        return "a";
    }

    // 反序列化
    bool Deserialize(std::string &in)
    {
        return true;
    }
    ~Request() {}

private:
    int _x;
    int _y;
    char _oper;
};

// server -> client
class Response
{
public:
    Response() {}
    Response(int result, int code)
        : _result(result),
          _code(code)
    {
    }

    // 序列化
    std::string Serialize()
    {
        return "a";
    }

    // 反序列化
    bool Deserialize(std::string &in)
    {
        return true;
    }
    ~Response() {}

private:
    int _result; // 运算结果
    int _code;   // 0:success, 1,2,3,4->不同运算异常情况
};

class Protocol
{
public:
    Protocol()
    {
    }
    void GetRequest(std::shared_ptr<Socket> &sock, InetAddr &client)
    {
    }
    ~Protocol()
    {
    }
private:
};